package com.tiancheng.trade.order.service;

import com.tiancheng.trade.commom.core.data.PageInfo;
import com.tiancheng.trade.commom.core.data.Result;
import com.tiancheng.trade.order.bo.QrPayNotifyBO;
import com.tiancheng.trade.order.bo.QrTradeMsgBO;
import com.tiancheng.trade.order.bo.ums.QrcOrderCacheBO;
import com.tiancheng.trade.order.model.QrOrder;
import com.tiancheng.trade.order.vo.admin.QueryQrPayVO;
import com.tiancheng.trade.order.vo.admin.res.QrPayDetailResVo;
import com.tiancheng.trade.order.vo.admin.res.QueryQrPayResVO;
import com.tiancheng.trade.order.vo.app.QrPayRecordQueryVO;
import com.tiancheng.trade.order.vo.app.QrPayVO;
import com.tiancheng.trade.order.vo.app.res.*;

import java.util.List;

/**
 * 二维码订单Service接口
 *
 * @author likailun
 * @date 2021-09-03
 */
public interface QrOrderService {

    /**
     * 二维码支付
     * @param qrPayVO
     * @return
     */
    Result<QrPayResVO> pay(QrPayVO qrPayVO);

    /**
     * 支付结果消息处理
     * @param qrPayNotifyBO
     */
    void savePayResult(QrPayNotifyBO qrPayNotifyBO);

    PageInfo<QrPayRecordQueryGroupResVO> queryPayRecord(QrPayRecordQueryVO qrPayRecordQueryVO);

    /**
     * 根据订单号查询
     * @param orderId 订单号
     * @param uid 用户id
     * @return
     */
    QrOrder queryByOrderId(String orderId,String uid);

    /**
     * 根据订单号查询-明细信息
     * @param orderId 订单号
     * @param uid 用户id
     * @return
     */
    QrPayRecordQueryDetailResVO queryOrderDetail(String orderId, String uid);

    /**
     * 关闭二维码订单
     * @param cache
     * @return
     */
    boolean closeOrder(QrcOrderCacheBO cache);

    /**
     * 处理二维码交易记录
     * @param payNotifyBO
     * @return
     */
    boolean saveQrTrade(QrTradeMsgBO payNotifyBO);

    PageInfo<QueryQrPayResVO> queryPage(QueryQrPayVO queryQrPayVO);

    /**
     * 后台查询二维码订单明细
     * @param id
     * @return
     */
    QrPayDetailResVo queryOrderDetailById(Long id);

    List<QrOrder> queryByOrderIds(String orderIds, String uid);

    /**
     * 查询二维码订单状态
     * @param orderId orderId 多个则以逗号分隔
     * @param uid 用户id
     * @return
     */
    List<QrPayStatusQueryResVO> getPayStatus(String orderId, String uid);
    /**
     * 后台查询二维码订单明细
     * @param orderId
     * @return
     */
    QrPayDetailResVo queryDetailByOrderId(String orderId);
}
